package logic

import (
	"context"
	"errors"
	"github.com/jinzhu/copier"
	"github.com/zeromicro/go-zero/core/logx"
	"grpc-common/live/types/live"
	"live-api/internal/svc"
	"live-api/internal/types"
	"time"
)

type LiveLogic struct {
	logx.Logger
	ctx    context.Context
	svcCtx *svc.ServiceContext
}

func (l *LiveLogic) GetCurrentLive(userId int64) (*types.GetCurrentLiveResp, error) {
	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
	defer cancel()
	// 在这里调用微信接口还是其他地方？
	LiveReq := &live.GetCurrentLiveReq{}
	LiveReq.UserId = userId
	res, err := l.svcCtx.LiveRpc.GetCurrentLive(ctx, LiveReq)
	if err != nil {
		return nil, errors.New("开启直播间信失败")
	}
	var resp types.GetCurrentLiveResp
	err = copier.Copy(&resp, &res)
	if err != nil {
		return nil, err
	}
	return &resp, nil
}

func (l *LiveLogic) FindAllLiveTag() ([]*types.Tag, error) {
	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
	defer cancel()
	// 在这里调用微信接口还是其他地方？
	LiveReq := &live.GetAllTagReq{}
	res, err := l.svcCtx.LiveRpc.GetAllTag(ctx, LiveReq)
	if err != nil {
		return nil, errors.New("开启直播间信失败")
	}
	var tags []*types.Tag
	err = copier.Copy(&tags, &res.Tags)
	if err != nil {
		return nil, err
	}
	return tags, nil
}

func NewLiveLogic(ctx context.Context, svcCtx *svc.ServiceContext) *LiveLogic {
	return &LiveLogic{
		Logger: logx.WithContext(ctx),
		ctx:    ctx,
		svcCtx: svcCtx,
	}
}

//func (l *LiveLogic) WechatLive(req *types.WechatLiveReq) (resp *types.WechatLiveResp, err error) {
//	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
//	defer cancel()
//	// 在这里调用微信接口还是其他地方？
//	LiveReq := &Live.WechatReq{}
//	err = copier.Copy(LiveReq, req)
//	if err != nil {
//		return nil, err
//	}
//	LiveResp, err := l.svcCtx.UCLiveRpc.WechatLive(ctx, LiveReq)
//	if err != nil {
//		return nil, errors.New("登录失败")
//	}
//	resp = &types.WechatLiveResp{}
//	err = copier.Copy(resp, LiveResp)
//	fmt.Println(resp)
//	if err != nil {
//		return nil, err
//	}
//	return
//}
//
//func (l *LiveLogic) GetUserInfo(token string) (resp *types.GetUserInfo, err error) {
//	ctx, cancel := context.WithTimeout(context.Background(), 50*time.Minute)
//	defer cancel()
//	// 在这里调用微信接口还是其他地方？
//	req := &Live.UserInfoReq{}
//	req.Token = token
//	LiveResp, err := l.svcCtx.UCLiveRpc.GetUserInfo(ctx, req)
//	if err != nil {
//		return nil, errors.New("调用用户信息接口失败")
//	}
//	resp = &types.GetUserInfo{}
//	err = copier.Copy(resp, LiveResp)
//	fmt.Println(resp)
//	if err != nil {
//		return nil, err
//	}
//	return
//}
//
//func (l *LiveLogic) UpdateUser(token string, req *types.UpdateUserReq) (int64, error) {
//	ctx, cancel := context.WithTimeout(context.Background(), 50*time.Minute)
//	defer cancel()
//	id, err := tools.ParseToken(token, l.svcCtx.Config.JWT.AccessSecret)
//	if err != nil {
//		return 0, err
//	}
//
//	// 在这里调用微信接口还是其他地方？
//	re := &Live.UpdateUserReq{}
//	err = copier.Copy(re, &req)
//	if err != nil {
//		return 0, err
//	}
//	re.Id = id
//	_, err = l.svcCtx.UCLiveRpc.UpdateUser(ctx, re)
//	if err != nil {
//		return 0, errors.New("调用修改用户信息接口失败")
//	}
//	return id, nil
//}
